import type { TreeNode } from 'element-plus'

// 通用响应类型
export interface BaseResponse<T = unknown> {
  code: number
  message: string
  result?: T
}
// 分页请求参数
export interface PageParams {
  page?: number
  pageSize?: number
  userName?: string
}
// 分页响应类型
export interface PageResult<T> {
  page: number
  pageSize: number
  pageTotal: number
  pageCount: number
  dataList: T[]
}

// 操作日志类型
export interface LogItem {
  id?: string
  name: string
  url: string
  ipAddress: string
  userName: string
  state: number // 0:正常 1:停用
  createTime?: string
}

// 角色类型定义
export interface RoleItem {
  id?: string
  roleName: string
  state: number  // 0:正常 1:停用
  createBy?: string
  createTime?: string
  updateBy?: string
  updateTime?: string
}
// 角色列表响应类型
export interface RoleListResponse {
  code: number
  message: string
  result: RoleItem[]
}
// 添加更精确的响应类型
export interface RoleMenuListResponse {
  code: number
  message: string
  result: MenuItem[]  // 明确指定返回的是字符串数组
}

// 菜单类型定义
export interface MenuItem {
  id?: string
  name: string
  type: number  // 0:目录 1:菜单 2:按钮
  componentPath?: string
  icon?: string
  isCache?: number  // 0:不缓存 1:缓存
  isDisplay?: number // 0:显示 1:不显示
  linkType?: number  // 0:系统 1:外链
  parentId?: string
  path?: string
  powerName?: string
  sort: number
  state: number  // 0:正常 1:停用
  createBy?: string
  createTime?: string
  updateBy?: string
  updateTime?: string
  children?: MenuItem[]
  label?: string
  expanded?: boolean
}
export interface MenuItem extends TreeNode {
  id?: string
  name: string
  type: number
  children?: MenuItem[]
}
// 树形菜单响应类型
export interface TreeMenuResponse {
  code: number
  message: string
  result: MenuItem[]  // 直接返回菜单数组
}

// 用户类型定义
export interface SysUser {
  id?: string | null
  userName: string | null
  password?: string | null
  nickname: string
  phone?: string
  gender: number  // 0:男 1:女
  remark?: string
  state: number  // 0:正常 1:停用
}
export interface UserItem {
  sysUser: SysUser
  roleIds?: string[]
}
export interface UserTreeResponse {
  code: number
  message: string
  result: MenuItem[]
}



